home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
windownt
/
wvnsrc75.zip
/
WVMAIL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-26
|
7KB
|
281 lines
/*--- WVMAIL.C ------------------------------------------------------------
*
* This file contains the window procedure for the windows
* used to edit outgoing mail messages.
*
* Mark Riordan 11 June 1991
*/
#include "windows.h"
#include "wvglob.h"
#include "winvn.h"
#ifndef MAC
#include "winundoc.h"
#endif
long FAR PASCAL
WinVnMailWndProc (hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WPARAM wParam;
LPARAM lParam;
{
HMENU hMenu;
PAINTSTRUCT ps; /* paint structure */
HDC hDC; /* handle to display context */
HWND hWndMail, hWndMailEdit;
#ifdef MAC
TEHandle TEH;
Rect myClipRect;
#endif
HDC hDCView;
int ih, j;
int found;
int imemo;
TypDoc *MyDoc;
char mesbuf[348]; /*** debug */
for (ih = 0, found = FALSE; !found && ih < MAXMAILWNDS; ih++)
{
if (hWndMails[ih] == hWnd)
{
#ifndef MAC
hWndMailEdit = hWndMailEdits[ih];
#else
TEH = TEHMails[ih];
#endif
found = TRUE;
break;
}
}
if (!found && message == WM_CREATE)
{
for (ih = 0; !found && ih < MAXVIEWS; ih++)
{
if (!hWndMails[ih])
{
found = TRUE;
hWndMails[ih] = hWnd;
break;
}
}
}
#if 0
if (!found)
{
MessageBox (hWnd, "Can't find Mail hWnd", "Error!", MB_OK | MB_ICONHAND);
DestroyWindow (hWnd);
return (NULL); /*** ? */
}
#endif
switch (message)
{
case WM_SYSCOMMAND:
return (DefWindowProc (hWnd, message, wParam, lParam));
case WM_CREATE:
#ifndef MAC
hWndMailEdit = hWndMailEdits[ih] = CreateWindow ("edit", (char *) NULL,
WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER
| ES_LEFT | ES_MULTILINE |
ES_AUTOHSCROLL | ES_AUTOVSCROLL
,
0, 0, 0, 0,
hWnd, EDITID, hInst, NULL);
sprintf (mesbuf, "hWndMailEdits[%d] = %5d\r\n ", ih, hWndMailEdits[ih]);
/* MessageBox(hWnd,mesbuf,"Edit Window Results",MB_OK|MB_ICONASTERISK); */
SetWindowText (hWndMailEdits[ih], mesbuf);
#endif
#if 0
{
long int freeHeap = FreeMem ();
long int biggestBlock = MaxBlock ();
long int freeStack = StackSpace ();
long int el;
el = 0;
sprintf (mesbuf, "FreeMem=%ld MaxBlock=%ld StackSpace=%ld",
freeHeap, biggestBlock, freeStack);
MessageBox (hWnd, mesbuf, "Available Memory", MB_OK);
}
#endif
CreatePostingText (MailDoc, hWnd, hWndMailEdit, DOCTYPE_MAIL);
/* SetFocus(hWndEdits[ih]); */
break;
case WM_SIZE:
#ifndef MAC
MoveWindow (hWndMailEdit, 0, 0, LOWORD (lParam),
HIWORD (lParam), TRUE);
#endif
break;
case WM_SETFOCUS:
SetFocus (hWndMailEdit);
break;
case WM_KEYDOWN:
if (wParam == VK_F6)
{
NextWindow (&(MailDocs[ih]));
}
break;
#ifdef MAC
case WM_PAINT:
if (TEH)
{
myClipRect = hWnd->portRect;
myClipRect.right -= SBarWidth;
myClipRect.bottom -= SBarWidth;
(*TEH)->viewRect = myClipRect;
TEUpdate (&myClipRect, TEH);
}
break;
#endif
case WM_COMMAND:
switch (wParam)
{
case IDM_CANCEL:
case IDV_EXIT:
DestroyWindow (hWnd);
break;
case IDM_POST:
StartMail (ih);
break;
case IDM_UNDO:
SendMessage (hWndMailEdit, WM_UNDO, 0, 0L);
break;
case IDM_CUT:
SendMessage (hWndMailEdit, WM_CUT, 0, 0L);
break;
case IDM_COPY:
SendMessage (hWndMailEdit, WM_COPY, 0, 0L);
break;
case IDM_PASTE:
SendMessage (hWndMailEdit, WM_PASTE, 0, 0L);
break;
case IDM_CLEAR:
SendMessage (hWndMailEdit, WM_CLEAR, 0, 0L);
break;
case IDM_SELALL:
SendMessage (hWndMailEdit, EM_SETSEL, 0,
MAKELONG (0, 32767));
break;
}
break;
case WM_DESTROY:
hWndMails[ih] = 0;
#ifndef MAC
hWndMailEdits[ih] = 0;
#else
TEDispose (TEHMails[ih]);
TEHMails[ih] = (TEHandle) 0;
TEHCurrent = 0;
#endif
break;
default:
return (DefWindowProc (hWnd, message, wParam, lParam));
}
return (0L);
}
/*--- function StartMail ----------------------------------------------
*
* Start the Mailing procedure for an article that has been created
* by the user.
*
* Entry ih is the index into hWndMailEdits of the child
* edit window containing the article.
*/
BOOL
StartMail (ih)
int ih;
{
BOOL found;
BOOL MailOK = FALSE, got_To = FALSE;
char outline[MAXOUTLINE], cmdline[MAXOUTLINE];
char *editptr, *outptr, *cptr;
HANDLE hEditBuffer;
HWND hWndMailEdit = hWndMailEdits[ih];
int linelen;
if (CommBusy)
{
MessageBox (hWndMails[ih], "Sorry, I am already busy retrieving information from the server.\n\
Try again in a little while.", "Can't mail message right now", MB_OK | MB_ICONASTERISK);
}
else
{
CommLinePtr = CommLineIn;
CommBusy = TRUE;
CommState = ST_MAIL_WAIT_PERMISSION;
CommDoc = &(MailDocs[ih]);
/* Create XMAIL command. We need to extract the "To:" line
* in order to find the recipient for the command.
*/
#ifndef MAC
hEditBuffer = (HANDLE) SendMessage (hWndMailEdit, EM_GETHANDLE, 0, 0L);
editptr = LocalLock (hEditBuffer);
#else
hEditBuffer = TEGetText (TEH);
editptr = LocalLock (hEditBuffer);
editptr[(*TEH)->teLength] = '\0';
#ifdef MRRBUG
sprintf (outline, "MailText after TEGetText, editptr=%.30s", editptr);
MessageBox ((HWND) 0, outline, "", MB_OK);
#endif
#endif
while (!got_To && *editptr)
{
for (linelen = 0, outptr = outline; *editptr && *editptr != '\r' &&
linelen < MAXOUTLINE; linelen++)
*(outptr++) = *(editptr++);
*outptr = '\0';
if (CompareStringNoCase (outline, "To: ", 4) == 0)
{
got_To = TRUE;
}
}
LocalUnlock (hEditBuffer);
if (!got_To)
{
MessageBox (hWndMails[ih], "Fill in the \"To:\" line", "Need a recipient",
MB_OK | MB_ICONHAND);
}
else
{
outptr = outline;
NextToken (&outptr);
strcpy (cmdline, "xMail ");
for (cptr = cmdline + strlen (cmdline);
*outptr > ' ' && cptr - cmdline < MAXOUTLINE;
*(cptr++) = *(outptr++));
*cptr = '\0';
PutCommLine (cmdline, strlen (cmdline));
MailOK = TRUE;
}
}
return (MailOK);
}